
let data = {
    shopcartlist: [],//购物车列表
    collectlist: [],//收藏列表
    searchlist: [],
    searchkeylist: []
}


//创建reducer纯函数(接收之前的state和action对象，必须返回一个新的state)
//action 表示一个实际的动作，一般用{ type: "", params: 0 }这种格式的对象表示
function reducer(state = data, action) {
    let newState = JSON.parse(JSON.stringify(state));
    if (action.type == 'COLLECT') {////收藏动作,处理完返回新的state

        newState.collectlist.push(action.params);

        return newState;
    } else if (action.type == 'CANCEL_COLLECT') {//取消收藏动作
        let index = newState.collectlist.findIndex((item) => {
            return item.id == action.params.id
        })
        if (index != -1) {//表示存在
            newState.collectlist.splice(index, 1)
        }
        return newState;
    } else if (action.type == 'ADD_CART') {//+1动作
        let obj = newState.shopcartlist.find((item) => {
            return item.id == action.params.id
        })
        if (obj) {//表示存在
            obj.count = obj.count + 1;
        } else {
            action.params.count = 1;
            newState.shopcartlist.push(action.params);
        }
        return newState;
    } else if (action.type == 'DELETE_CART') {
        let obj = newState.shopcartlist.find((item) => {
            return item.id == action.params.id
        })
        let index = newState.shopcartlist.findIndex((item) => {
            return item.id == action.params.id
        })
        if (obj.count > 1) {//表示存在
            obj.count = obj.count - 1;
        } else {
            newState.shopcartlist.splice(index, 1)
        }
        return newState;
    } else if (action.type == 'SEARCHKEY') {  //搜索词汇
        if (action.params) {
            newState.searchlist.push(action.params)
        }

    } else if (action.type == 'SEARCHKEY_LIST') { //搜索列表
        newState.searchkeylist = action.params
    } else if (action.type === 'GOODCART_LIST') { //同步购物车数据
        newState.goodscartlist = action.params
    } 
    else {//当前面所有的条件都不成立时，执行else 返回之前的state（不对state做修改）
        return state;
    }
    return newState;
    // 另一种写法（switch，case）
    /* switch (action.type) {
    case 'COLLECT': //收藏动作
        return newState
    case 'CANCEL_COLLECT': //取消收藏动作
        return newState
    default:
        return state;
    } */

}



export default reducer;